/* 
 * File:   Utiles.cpp
 * Author: Dianita
 * 
 * Created on 2 de noviembre de 2013, 04:00 PM
 */

#include "Utiles.h"
#include "Separador.h"
#include <stdlib.h>
#include <list>
#include <iostream>
#include <sstream>
using namespace std;

Utiles::Utiles() {
}

int Utiles::conversorString_Int(char *cadena) {
    return atoi(cadena);
}

string Utiles::conversorInt_String(int numero) {
    stringstream ss;
    ss << numero;
    return ss.str();
}

string Utiles::conversorChar_String(char caracter) {
    stringstream ss;
    string s;
    ss << caracter;
    ss >> s;
    return s;
}

Letra Utiles::obtenerLetra(list<Letra> alfabeto, int contador) {
    list<Letra>::iterator indiceSalida;
    int indice = 0;
    Letra letraAux;
    for (indiceSalida = alfabeto.begin(); indiceSalida != alfabeto.end(); indiceSalida++) {
        if (indice == contador) {
            letraAux = *indiceSalida;
            return letraAux;
        }
        indice++;
    }
    return letraAux;
}

Transicion Utiles::obtenerTransicion(list<Transicion> transiciones, int contador) {
    list<Transicion>::iterator indiceSalida;
    int indice = 0;
    Transicion transicionAux;
    for (indiceSalida = transiciones.begin(); indiceSalida != transiciones.end(); indiceSalida++) {
        if (indice == contador) {
            transicionAux = *indiceSalida;
            return transicionAux;
        }
        indice++;
    }
    return transicionAux;
}

Estado Utiles::obtenerEstado(list<Estado> estados, int contador) {
    list<Estado>::iterator indiceSalida;
    int indice = 0;
    Estado estadoAux;
    for (indiceSalida = estados.begin(); indiceSalida != estados.end(); indiceSalida++) {
        if (indice == contador) {
            estadoAux = *indiceSalida;
            return estadoAux;
        }
        indice++;
    }
    return estadoAux;
}

string Utiles::obtenerPalabra(list<string> palabras, int contador) {
    list<string>::iterator indiceSalida;
    int indice = 0;
    string estadoAux;
    for (indiceSalida = palabras.begin(); indiceSalida != palabras.end(); indiceSalida++) {
        if (indice == contador) {
            estadoAux = *indiceSalida;
            return estadoAux;
        }
        indice++;
    }
    return estadoAux;
}

Separador Utiles::obtenerSeparador(list<Separador> separadores, int contador) {
    list<Separador>::iterator indiceSalida;
    int indice = 0;
    Separador separadorAux;
    for (indiceSalida = separadores.begin(); indiceSalida != separadores.end(); indiceSalida++) {
        if (indice == contador) {
            separadorAux = *indiceSalida;
            return separadorAux;
        }
        indice++;
    }
    return separadorAux;
}

Estado Utiles::obtenerEstadoFinal(list<Transicion> transiciones, Estado estadoInicial, Letra letra) {
    list<Transicion>::iterator indiceSalida;
    Estado estadoAux("0");
    Transicion transicionAux;
    for (indiceSalida = transiciones.begin(); indiceSalida != transiciones.end(); indiceSalida++) {
        transicionAux = *indiceSalida;
        if (transicionAux.getEstadoInicial().getNombre().compare(estadoInicial.getNombre()) == 0) {
            if (transicionAux.getLetra().getNombre().compare(letra.getNombre())==0) {
                return transicionAux.getEstadoFinal();
            }
        }
    }
    return estadoAux;
}
